
class Space(object):
    """
    状态空间和动作空间的通用接口，并定义了一些必须实现的方法和属性
    Provides a classification state spaces and action spaces,
    so you can write generic code that applies to any Environment.
    E.g. to choose a random action.
    """

    def sample(self, seed=0):
        """
        必须定义，均匀随机地采样一个元素。子类需要根据具体的空间类型来实现这个方法
        Uniformly randomly sample a random elemnt of this space
        """
        raise NotImplementedError

    def contains(self, x):
        """
        判断给定的元素 x 是否是该空间的一个有效成员。也需要根据具体的空间类型来实现这个方法
        Return boolean specifying if x is a valid
        member of this space
        """
        raise NotImplementedError

    def flatten(self, x):
        """将给定的元素进行扁平化（转换为一维数组）"""
        raise NotImplementedError

    def unflatten(self, x):
        """将给定的元素进行还原（恢复原始形状）"""
        raise NotImplementedError

    def flatten_n(self, xs):
        """对n个元素进行扁平化"""
        raise NotImplementedError

    def unflatten_n(self, xs):
        """对n个元素还原"""
        raise NotImplementedError

    @property
    def flat_dim(self):
        """
        张量表示的扁平化向量的维度。具体实现需要根据空间的类型进行定义
        The dimension of the flattened vector of the tensor representation
        """
        raise NotImplementedError
